import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QGridLayout, QLineEdit, QLabel, QPushButton

'''
相对布局是要将控件放到盒布局中，一般要加入一个盒布局QHBoxLayout(水平） ，QVBoxLayout(垂直),网格布局QGridLayout
绝对布局直接将控件move函数移动到指定位置后不变
'''


class MyClass(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('刘金玉编程')
        self.setGeometry(app.desktop().width() / 2 - self.width() / 2, 50, 400, 300)
        lblCode = QLabel('验证码', self)
        leCode = QLineEdit(self)  # 单行文本编辑框
        btnCode = QPushButton('验证', self)
        # 绝对定位
        # lblCode.move(10, 25)
        # leCode.move(60, 20)
        # btnCode.move(200, 18)
        # 相对定位（水平）默认上下左右居中,左右大小自动适应
        # hlayout = QHBoxLayout(self)
        # hlayout.addWidget(lblCode)
        # hlayout.addWidget(leCode)
        # hlayout.addWidget(btnCode)
        # hlayout.addStretch()  # 弹簧比例 左起默认大小依序排列
        # 相对定位（垂直方向）
        # vlayout = QVBoxLayout(self)
        # # vlayout.addLayout(hlayout)
        # vlayout.addStretch(2)
        # vlayout.addWidget(lblCode)
        # vlayout.addStretch(0)
        # vlayout.addWidget(leCode)
        # vlayout.addStretch(1)
        # vlayout.addWidget(btnCode)
        # vlayout.addStretch(2)  # 弹簧比例 从上起依序往下排列
        # Grid 网格布局栅格布局
        glayout = QGridLayout(self)
        glayout.setSpacing(20)  # 设置间距像数px
        # 第0行，第0列开始，占3行1列
        glayout.addWidget(lblCode, 0, 0, 1, 1)
        glayout.addWidget(leCode, 0, 1)
        glayout.addWidget(btnCode, 2, 0, 1, 2)

        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    myf = MyClass()
    app.exec_()
